package persistencias;


import classes.Locacao;
import classes.Motorista;
import classes.Cliente;
import classes.Veiculo;
import classes.TipoLocacao;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class PLocacao {
    private List<Locacao> locacoes = new ArrayList<Locacao>();
    
    public void adicionar(Locacao locacao){
        locacoes.add(locacao);
    }

    public List<Locacao> getLocacoes() {
        return locacoes;
    }
    
    public List<Locacao> consultarPorDataAtual(String dataAtual){
        int i, dia, mes, ano, diaA, mesA, anoA;
        String [] vetor; String linha = dataAtual;
        List<Locacao> locacoesLivres = null;
        vetor = linha.split("/");
        diaA = Integer.parseInt(vetor[0]);
        mesA = Integer.parseInt(vetor[1]);
        anoA = Integer.parseInt(vetor[2]);
        
        for (i=0; i <locacoes.size(); i++) {
                linha = locacoes.get(i).getDataDevolucao();
                dia = Integer.parseInt(vetor[0]);
                mes = Integer.parseInt(vetor[1]);
                ano = Integer.parseInt(vetor[2]);
                if  (ano < anoA) {
                    locacoesLivres.add(locacoes.get(i));
                }
                else if (mes < mesA) {
                    locacoesLivres.add(locacoes.get(i));
                }
                else if (dia < diaA) {
                    locacoesLivres.add(locacoes.get(i));
                }
                else System.out.println("");
        }
        return locacoesLivres;
    }
    
   public List<Locacao> consultarPorMotorista(Motorista motorista){
        int i, j;
        List<Locacao> locacoesLivres = null;
        for (i=0; i <locacoes.size(); i++) {
            for (j=0; j< locacoes.get(i).getMotoristas().size();j++) {
                if(locacoes.get(i).getMotoristas().get(j).getCnh() == motorista.getCnh()){
                    locacoesLivres.add(locacoes.get(i));
                    break;
                }
            }
        }
        return locacoesLivres;
    }
   
   public List<Locacao> consultarPorCliente(Cliente cliente){
        int i;
        List<Locacao> locacoesLivres = null;
        for (i=0; i <locacoes.size(); i++) {
                if(locacoes.get(i).getCliente().getCpf() == cliente.getCpf()) {
                    locacoesLivres.add(locacoes.get(i));
                }
        }
        return locacoesLivres;
    }
   
  public List<Locacao> consultarPorVeiculo(Veiculo veiculo){
        int i;
        List<Locacao> locacoesLivres = null;
        for (i=0; i <locacoes.size(); i++) {
                if(locacoes.get(i).getVeiculo().getPlaca().equalsIgnoreCase(veiculo.getPlaca())) {
                    locacoesLivres.add(locacoes.get(i));
                }
        }
        return locacoesLivres;
    }
    
    public void finalizar(Locacao locacao) {
        locacoes.remove(locacao);       
    }
    
    // Manipulacao de Arquivo
    
   public void salvarLocacoesArquivo(List<Locacao> locacoes) throws IOException {
                FileWriter writer = new FileWriter(new File("locacoes.txt"));
                PrintWriter saida = new PrintWriter(writer);
                int i;
                for( i=0; i < locacoes.size(); i++) {
                        saida.print(locacoes.get(i).getKmSaida() + "," 
                        + locacoes.get(i).getKmEntrada() + ","
                                
                        + locacoes.get(i).getTipoLocacao().getTipo() + "," 
                                + locacoes.get(i).getTipoLocacao().getPrecoKm() + ","
                                + locacoes.get(i).getTipoLocacao().getTaxaBase() + ","
                                
                        + locacoes.get(i).getValorLocacao() + ","
                        + locacoes.get(i).getDataSaida() + ","
                        + locacoes.get(i).getDataDevolucao()+ "," 
                        + locacoes.get(i).getPrevisaoDias() + ","
                                
                        + locacoes.get(i).getCliente().getNome() + "," 
                                + locacoes.get(i).getCliente().getEndereco() + ","
                                + locacoes.get(i).getCliente().getCpf() + ","
                                + locacoes.get(i).getCliente().getTelefone() + ","
                                
                        + locacoes.get(i).getVeiculo().getPlaca() + ","
                                + locacoes.get(i).getVeiculo().getMarca() + ","
                                + locacoes.get(i).getVeiculo().getCor() + ","
                                + locacoes.get(i).getVeiculo().getModelo() + ","
                                + locacoes.get(i).getVeiculo().getTipo() + ","
                                + locacoes.get(i).getVeiculo().getOpcionais() + ","
                                + locacoes.get(i).getVeiculo().getObservacoes() + ",");
                        
                        for (int j = 0; j < locacoes.get(i).getMotoristas().size(); j++){
                            saida.print( locacoes.get(i).getMotoristas().get(j).getNome() + ","
                                    + locacoes.get(i).getMotoristas().get(j).getCpf()+ ","
                                    + locacoes.get(i).getMotoristas().get(j).getEndereco() + ","
                                    + locacoes.get(i).getMotoristas().get(j).getTelefone() + ","
                                    + locacoes.get(i).getMotoristas().get(j).getCnh() + ",");
                        }
                }
                writer.close();
                saida.close();
        }
    
    public void carregarLocacoesArquivo(List<Locacao> locacoes) throws IOException {
                File arquivo = new File("locacoes.txt");
                
                if(!arquivo.exists()) arquivo.createNewFile();
                else {
               
                        FileReader leitura = new FileReader("locacoes.txt");
                        BufferedReader leitor = new BufferedReader(leitura);
                                
                        String linha = null;
                        String [] vetor = null;
                
                        while((linha = leitor.readLine()) != null) {
                                vetor = linha.split(",");
                        
                                Double kmSaida= Double.parseDouble(vetor[0]);
                                Double kmEntrada = Double.parseDouble(vetor[1]);
                                
                                String tipoDeLocacao = vetor[2];
                                Double precoKm = Double.parseDouble(vetor[3]);
                                Double taxaBase = Double.parseDouble(vetor[4]);
                                
                                Double valorLocacao = Double.parseDouble(vetor[3]);
                                String dataSaida = vetor[4];
                                String dataDevolucao = vetor[5];
                                int previsaoDias = Integer.parseInt(vetor[6]);
                                
                                String nome = vetor[7];
                                String endereco = vetor[8];
                                long telefone = Long.parseLong(vetor[9]);
                                long cpf = Long.parseLong(vetor[10]);
                                
                                String placa = vetor[11];
                                String marca = vetor[12];
                                String cor = vetor[13];
                                String modelo = vetor[14];
                                String tipo = vetor[15];
                                String opcionais = vetor[16];
                                String observacoes = vetor[17];
                                
                                List<Motorista> motoristas = null;
                                Motorista motorista;
                                int k =18;
                                for (int j = 0; j < locacoes.get(j).getMotoristas().size(); j++){
                                        String nomeMotorista = vetor[k];
                                        long cpfMotorista = Long.parseLong(vetor[k]);
                                        String enderecoMotorista = vetor[k];
                                        long telefoneMotorista = Long.parseLong(vetor[k]);
                                        long cnh = Long.parseLong(vetor[k]);
                                        motorista = new Motorista (nomeMotorista, cpfMotorista, enderecoMotorista, telefoneMotorista, cnh);
                                        motoristas.add(motorista);
                                }
                                
                                Cliente cliente = new Cliente (nome, cpf, endereco, telefone);
                                Veiculo veiculo = new Veiculo(placa, marca, modelo, cor, tipo, opcionais, observacoes);
                                TipoLocacao tipoLocacao = new TipoLocacao(tipoDeLocacao, precoKm, taxaBase);
                                
                                Locacao novaLocacao = new Locacao(kmSaida, kmEntrada);
                                novaLocacao.setTipoloLocacao(tipoLocacao);
                                novaLocacao.setValorLocacao(valorLocacao);
                                novaLocacao.setDataDevolucao(dataDevolucao);
                                novaLocacao.setDataSaida(dataSaida);
                                novaLocacao.setPrevisaoDias(previsaoDias);
                                novaLocacao.setCliente(cliente);
                                novaLocacao.setVeiculo(veiculo);
                                novaLocacao.setMotoristas(motoristas);
                                
                
                                adicionar(novaLocacao);
                        }
                        leitor.close();
                        leitura.close();
                }
        }
    
}
